Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / test / java / com / geeksville / mesh / service / MeshMessageProcessorTest.kt

Displaying Raw • Download

app/src/test/java/com/geeksville/mesh/service/MeshMessageProcessorTest.kt features/lockdown (1ea87dbb) Text, 3.68 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.geeksville.mesh.service

Tff7b72import T7ee787io.mockk.every
Tff7b72import T7ee787io.mockk.mockk
Tff7b72import T7ee787io.mockk.verify
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.test.StandardTestDispatcher
Tff7b72import T7ee787kotlinx.coroutines.test.TestScope
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.junit.Before
Tff7b72import T7ee787org.junit.Test
Tff7b72import T7ee787org.meshtastic.core.data.repository.MeshLogRepository
Tff7b72import T7ee787org.meshtastic.core.service.ServiceRepository
Tff7b72import T7ee787org.meshtastic.proto.Data
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.PortNum

Tff7b72class T56d364MeshMessageProcessorTest Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3nodeManagerTb4b4b4: Te6edf3MeshNodeManager Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepository Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72private Tff7b72val Te6edf3meshLogRepositoryTb4b4b4: Te6edf3MeshLogRepository Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72private Tff7b72val Te6edf3routerTb4b4b4: Te6edf3MeshRouter Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72private Tff7b72val Te6edf3fromRadioDispatcherTb4b4b4: Te6edf3FromRadioPacketHandler Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72private Tff7b72val Te6edf3meshLogRepositoryLazy Tff7b72= Te6edf3daggerTb4b4b4.Te6edf3Lazy Tb4b4b4{ Te6edf3meshLogRepository Tb4b4b4}
Tff7b72private Tff7b72val Te6edf3dataHandlerTb4b4b4: Te6edf3MeshDataHandler Tff7b72= Te6edf3mockkTb4b4b4(Te6edf3relaxed Tff7b72= Tff7b72trueTb4b4b4)

Tff7b72private Tff7b72val Te6edf3isNodeDbReady Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Tff7b72falseTb4b4b4)
Tff7b72private Tff7b72val Te6edf3testDispatcher Tff7b72= Te6edf3StandardTestDispatcherTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3testScope Tff7b72= Te6edf3TestScopeTb4b4b4(Te6edf3testDispatcherTb4b4b4)

Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3processorTb4b4b4: Te6edf3MeshMessageProcessor

Tf0883e@Before
Tff7b72fun Td2a8ffsetUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3every Tb4b4b4{ Te6edf3nodeManagerTb4b4b4.Te6edf3isNodeDbReady Tb4b4b4} Te6edf3returns Te6edf3isNodeDbReady
Te6edf3every Tb4b4b4{ Te6edf3routerTb4b4b4.Te6edf3dataHandler Tb4b4b4} Te6edf3returns Te6edf3dataHandler
Te6edf3processor Tff7b72=
Te6edf3MeshMessageProcessorTb4b4b4(Te6edf3nodeManagerTb4b4b4, Te6edf3serviceRepositoryTb4b4b4, Te6edf3meshLogRepositoryLazyTb4b4b4, Te6edf3routerTb4b4b4, Te6edf3fromRadioDispatcherTb4b4b4)
Te6edf3processorTb4b4b4.Te6edf3startTb4b4b4(Te6edf3testScopeTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`early packets are buffered and flushed when DB is ready`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTestTb4b4b4(Te6edf3testDispatcherTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72= Te6edf3MeshPacketTb4b4b4(Te6edf3id Tff7b72= T79c0ff1T79c0ff2T79c0ff3Tb4b4b4, Te6edf3decoded Tff7b72= Te6edf3DataTb4b4b4(Te6edf3portnum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APPTb4b4b4)Tb4b4b4)

T8b949e// 1. Database is NOT ready
Te6edf3isNodeDbReadyTb4b4b4.Te6edf3value Tff7b72= Tff7b72false
Te6edf3testSchedulerTb4b4b4.Te6edf3runCurrentTb4b4b4(Tb4b4b4) T8b949e// trigger start() onEach

Te6edf3processorTb4b4b4.Te6edf3handleReceivedMeshPacketTb4b4b4(Te6edf3packetTb4b4b4, T79c0ff9T79c0ff9T79c0ff9Tb4b4b4)

T8b949e// Verify that handleReceivedData has NOT been called yet
Te6edf3verifyTb4b4b4(Te6edf3exactly Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ Te6edf3dataHandlerTb4b4b4.Te6edf3handleReceivedDataTb4b4b4(Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}

T8b949e// 2. Database becomes ready
Te6edf3isNodeDbReadyTb4b4b4.Te6edf3value Tff7b72= Tff7b72true
Te6edf3testSchedulerTb4b4b4.Te6edf3runCurrentTb4b4b4(Tb4b4b4) T8b949e// trigger onEach(true)

T8b949e// Verify that handleReceivedData is now called with the buffered packet
Te6edf3verifyTb4b4b4(Te6edf3exactly Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{ Te6edf3dataHandlerTb4b4b4.Te6edf3handleReceivedDataTb4b4b4(Te6edf3match Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= T79c0ff1T79c0ff2T79c0ff3 Tb4b4b4}Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`packets are processed immediately if DB is already ready`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTestTb4b4b4(Te6edf3testDispatcherTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72= Te6edf3MeshPacketTb4b4b4(Te6edf3id Tff7b72= T79c0ff4T79c0ff5T79c0ff6Tb4b4b4, Te6edf3decoded Tff7b72= Te6edf3DataTb4b4b4(Te6edf3portnum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APPTb4b4b4)Tb4b4b4)

Te6edf3isNodeDbReadyTb4b4b4.Te6edf3value Tff7b72= Tff7b72true
Te6edf3testSchedulerTb4b4b4.Te6edf3runCurrentTb4b4b4(Tb4b4b4)

Te6edf3processorTb4b4b4.Te6edf3handleReceivedMeshPacketTb4b4b4(Te6edf3packetTb4b4b4, T79c0ff9T79c0ff9T79c0ff9Tb4b4b4)

Te6edf3verifyTb4b4b4(Te6edf3exactly Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{ Te6edf3dataHandlerTb4b4b4.Te6edf3handleReceivedDataTb4b4b4(Te6edf3match Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= T79c0ff4T79c0ff5T79c0ff6 Tb4b4b4}Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3anyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.09s